package com.lj.infoisland.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lj.infoisland.common.convention.result.Result;
import com.lj.infoisland.domain.dto.NewsDTO;
import com.lj.infoisland.domain.po.News;
import com.lj.infoisland.domain.vo.HotNewsVO;
import com.lj.infoisland.domain.vo.NewsVO;

import javax.servlet.http.HttpServletRequest;
import java.util.List;

/*
 * @description 新闻服务类
 * @author 龙洁
 * @create 2024-10-21 下午10:39
 */
public interface NewsService extends IService<News> {
    /**
     * 获取用户新闻列表
     *
     * @return 用户新闻列表
     */
    IPage<NewsVO> getUserNewsList(Page<News> page);

    /**
     * 获取新闻列表
     *
     * @return 新闻列表
     */
    IPage<NewsVO> getNewsList(HttpServletRequest request, Page<News> newsPage, String categoryId);

    /**
     * 点赞新闻
     */
    Result<?> likeNews(String newsId);

    /**
     * 收藏新闻
     */
    Result<?> collectNews(String newsId);

    /**
     * 判断是否点赞
     */
    boolean isLiked(String newId);

    /**
     * 判断是否收藏
     */
    boolean isCollect(String newId);

    /**
     * 搜索新闻
     * @return 新闻列表
     */
    IPage<NewsVO> searchNews(String keyword, Integer pageNum, Integer pageSize);

    /**
     * 获取用户收藏文章
     * @return 收藏文章列表
     */
    Result<List<NewsVO>> getCollectNewsList();

    /**
     * 获取热门新闻
     * @return 热门新闻
     */
    Result<NewsVO> getHotNew(Integer categoryId);

    /**
     * 增加新闻浏览量
     * @param newId 新闻id
     */
    void addViewNum(String newId);

    Result<List<HotNewsVO>> getHotNewsList();

    void publishNews(NewsDTO newsDTO, String contentUrl);

    Result<List<NewsVO>> getSimilarNews(String id);

    Integer getNewsCategoryCount(Integer value);

    void updateNewsStatus(String id, Boolean published);
}
